\documentclass{ctexart}

\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{subfigure}
\usepackage[graphicx]{realboxes}


\title{项目作业：五则运算计算器的实现}


\author{夏知人 \\信息与计算科学   3210103669}

\begin{document}

\maketitle



\section{设计思路}
\subsection{transform函数}
作用是把输入的字符转化为数字。计算器最开始输入的数字是以字符形式储存的，需要将其转化为数字形态才能进行运算。先要判断是否有多个小数点，用变量point储存小数点数量，
若存在多个小数点，则报错。还要判断数字是否是以小数点结尾，若是以小数点结尾，则报错。在进行完上述检测后，需要对小数点左侧的数字位数进行统计，来确定每个数字的权重，
如个位数对应的权重就是1，十位数对应的权重就是10，以此类推，并用变量power进行储存。最后将输入字符串转化为的数字储存在变量number中返回。

\subsection{Inffix\_to\_Suffix函数}
作用是将输入的中缀表达式转化为后缀表达式。需要调用transform函数对输入字符串中的数字部分进行转化，难点就在于如何界定数字部分和运算符部分、括号的处理。这里调用栈对转化的
数字进行储存，并使用数组Suffix\_exp储存转化完成的后缀表达式。先用变量flag对数字前的符号进行储存，再对后面的数字主体部分调用transform函数进行转化，转化完的数字存入栈之中。
设立运算优先级，用变量rank储存不同运算符的有限级，其中数字和左括号所对应的优先级最低，为0，表明其在运算过程中最后考虑。对于左括号，存入栈中并将赋予最低优先级；对于右括号，
进行出栈直到遇到左括号，将左括号也出栈但不存入Suffix\_exp数组。对于运算符，满足栈空或优先级高于栈顶操作符的条件，则该操作符入栈；若不满足，则出栈直至满足条件，再将该操作符入栈。
如此操作将所有运算符从栈中全部存入Suffix\_exp数组中。最后检测栈空间是否为空，若非空，则将栈中的元素出栈放入Suffix\_exp数组中。这样就将中缀表达式转化为了后缀表达式，且在后缀表达式
中不存在括号，这样可以有效简化接下来的运算复杂度。

\subsection{operation函数}
作用是对转化完成的后缀表达式进行运算，计算出结果并将其返回。调用栈空间储存后缀表达式中的数字。要注意的是栈中弹出的数字是有先后顺序的，先弹出的数字反而对应计算数的后一个数，后弹出的
数字对应计算数的前一个数。当后缀表达式的数组弹出一个运算符时，存储数字的栈先后弹出两个数对该操作符进行对应运算，将运算完成的结果在压入栈中，直到栈为空。当运算符是$/$时，需要对除数进行
检查，若除数为0，则报错。当运算结束时存储数字的栈还剩下最后一个元素，这就是所需要的运算结果，使用变量result进行储存。最后弹出栈顶的元素，并检查结束时储存数字的栈是否为空，若非空则输出
栈中的元素并报错。若出现加减乘除乘方之外的运算方式，则报错。输出输入的运算式与运算结果，结束计算过程。


\section{测试说明}

以下是各种类型的输入测试

\begin{figure}
\centering 
\includegraphics[height=4.5cm,width=9.5cm]{pic01.jpg}
\caption{测试样例试作初号机}
\label{1}
\end{figure}

\begin{figure}
\centering 
\includegraphics[height=4.5cm,width=9.5cm]{pic02.jpg}
\caption{测试样例试作二号机}
\label{2}
\end{figure}

\begin{figure}
\centering 
\includegraphics[height=4.5cm,width=9.5cm]{pic03.jpg}
\caption{测试样例试作三号机}
\label{3}
\end{figure}

\begin{figure}
\centering 
\includegraphics[height=4.5cm,width=9.5cm]{pic04.jpg}
\caption{测试样例试作四号机}
\label{4}
\end{figure}

\begin{figure}
\centering 
\includegraphics[height=4.5cm,width=9.5cm]{pic05.jpg}
\caption{测试样例试作五号机}
\label{5}
\end{figure}

\begin{figure}
\centering 
\includegraphics[height=4.5cm,width=9.5cm]{pic06.jpg}
\caption{测试样例试作六号机}
\label{6}
\end{figure}


\end{document}
